home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / HD-Installer / jst_dev / sources / OSEmu / graphics.s < prev    next >
Text File  |  2000-04-12  |  21KB  |  1,032 lines

  1. * $Id: graphics.s 1.1 1999/02/03 04:10:07 jotd Exp jotd $
  2. **************************************************************************
  3. *    GRAPHICS LIBRARY
  4. **************************************************************************
  5. **************************************************************************
  6. *    INITIALIZATION
  7. **************************************************************************
  8.  
  9. GFXINIT        move.l    _gfxbase,d0
  10.         beq    .init
  11.         rts
  12.  
  13. .init        move.l    #1056,d0    ;-_LVOWriteChunkyPixels,d0
  14.         move.l    #$220,d1
  15.         lea    _gfxname,a0
  16.         bsr    _InitLibrary
  17.         move.l    d0,a0
  18.         move.l    d0,_gfxbase
  19.         
  20.         patch    _LVOOwnBlitter(a0),MYRTS(PC)
  21.         patch    _LVODisownBlitter(a0),MYRTS(PC)
  22.         patch    _LVOInitView(a0),_InitView(PC)
  23.         patch    _LVOInitVPort(a0),_InitVPort(PC)
  24.         patch    _LVOFreeVPortCopLists(a0),_FreeVPortCopLists(PC)
  25.         patch    _LVOInitBitMap(a0),_InitBitMap(PC)
  26.         patch    _LVOInitRastPort(a0),_InitRastPort(PC)
  27.         patch    _LVOMakeVPort(a0),_MakeVPort(PC)
  28.         patch    _LVOMrgCop(a0),_MrgCop(PC)
  29.         patch    _LVOCWait(a0),_CWait(PC)    ; added by JOTD
  30.         patch    _LVOCMove(a0),_CMove(PC)    ; added by JOTD
  31.         patch    _LVOCBump(a0),_CBump(PC)    ; added by JOTD
  32.         patch    _LVOLoadView(a0),_LoadView(PC)
  33.         patch    _LVOLoadRGB4(a0),_LoadRGB4(PC)
  34.         patch    _LVOSetRGB4(a0),_SetRGB4(PC)
  35.         patch    _LVOFreeSprite(a0),_FreeSprite(PC)
  36.         patch    _LVOGetSprite(a0),_GetSprite(PC)
  37.         patch    _LVOChangeSprite(a0),_ChangeSprite(PC)
  38.         patch    _LVOMoveSprite(a0),_MoveSprite(PC)
  39.         patch    _LVOWaitBlit(a0),_WaitBlit(PC)
  40.         patch    _LVOBltBitMap(a0),_BltBitMap(PC)
  41.         patch    _LVOVBeamPos(a0),_VBeamPos(PC)
  42.         patch    _LVODraw(a0),MYRTS(PC)
  43.         patch    _LVOMove(a0),_SETMOVE(PC)
  44.         patch    _LVOSetAPen(a0),_SETAPEN(PC)
  45.         patch    _LVOSetBPen(a0),_SETBPEN(PC)
  46.         patch    _LVOSetDrMd(a0),_SETDRAWMODE(PC)
  47.         patch    _LVOWaitTOF(a0),_WaitTOF(PC)
  48. ;;        patch    _LVOWaitBOVP(a0),_WaitBOVP(PC)        ; -- added by JOTD
  49.         patch    _LVORectFill(a0),_RectFill(PC)        ; -- added by JOTD
  50.         patch    _LVOSetRast(a0),_SetRast(PC)        ; -- added by JOTD
  51.         patch    _LVOInitTmpRas(a0),_InitTmpRas(PC)    ; -- added by JOTD
  52.         patch    _LVOInitArea(a0),_InitArea(PC)        ; -- added by JOTD
  53.         patch    _LVOReadPixel(a0),_ReadPixel(PC)
  54.         patch    _LVOWritePixel(a0),_WritePixel(PC)
  55.         patch    _LVOBltTemplate(a0),_BltTemplate(PC)
  56.         patch    _LVOAllocRaster(A0),_ALLOCRASTER(PC)
  57.         patch    _LVOFreeRaster(A0),_FREERASTER(PC)
  58.         patch    _LVOBltClear(A0),_BLTCLEAR(PC)
  59.         patch    _LVOGetColorMap(A0),_GETCOLORMAP(PC)
  60.         patch    _LVOFreeColorMap(A0),_FREECOLORMAP(PC)
  61.     ;;    patch    _LVOUCopperListInit(a0),_UCOPPERLISTINIT(PC) ; -- added by JOTD
  62.  
  63.         patch    _LVOOpenFont(A0),_OPENFONT(PC)
  64.         patch    _LVOSetFont(A0),_SETFONT(PC)
  65.         patch    _LVOText(A0),_PRINTTEXT(PC)
  66.  
  67.         MOVE.L    #MYVIEW,gb_ActiView(A0)
  68.         lea    STDCOPPER(PC),a1
  69.         MOVE.L    a1,(gb_LOFlist,A0)
  70.         MOVE.L    a1,(gb_SHFlist,A0)
  71.         MOVE.L    a1,(_custom+cop2lc)
  72.         lea    CPJMP2,a1
  73.         move.l    a1,(gb_copinit,a0)
  74.         MOVE.L    a1,(_custom+cop1lc)
  75.         lea.l   _TOPAZ8FONT(PC),a1        ; added by Harry
  76.         move.l  a1,(gb_DefaultFont,a0)        ; added by Harry
  77.  
  78.         moveq    #4,d0                ;pal
  79.         cmp.l    #PAL_MONITOR_ID,_monitor
  80.         beq    .1
  81.         moveq    #1,d0                ;ntsc
  82. .1        MOVE.W    d0,(gb_DisplayFlags,A0)
  83.  
  84.         clr.b    (gb_SpriteReserved,a0)
  85.  
  86.         clr.l    -(a7)                ;TAG_DONE
  87.         pea    RESTORECOPPER2(pc)
  88.         move.l    #WHDLTAG_CBSWITCH_SET,-(a7)
  89.         move.l    a7,a0
  90.         move.l    _RESLOAD(pc),a1
  91.         jsr    (resload_Control,a1)
  92.         lea    (12,a7),a7                      ;restore sp
  93.         
  94.         tst.w    (_custom+copjmp1)
  95.         move.w    #DMAF_SETCLR!DMAF_MASTER!DMAF_COPPER!DMAF_BLITTER,(_custom+dmacon)
  96.  
  97.         rts
  98.  
  99. RESTORECOPPER2    move.l    a1,.save
  100.         move.l    _gfxbase,a1
  101.         move.l    (gb_LOFlist,a1),(_custom+cop2lc)
  102.         move.l    .save,a1
  103.         jmp    (A0)
  104.  
  105.     CNOP 0,4
  106. .save        dc.l    0
  107. CPJMP2        dc.l    $0201fffe    ;wait 0,2
  108.         DC.L    $008A0000
  109. STDCOPPER    DC.L    $FFFFFFFE
  110.  
  111. MYVIEW
  112.     DC.L    _INITVIEWPORT
  113.     DC.L    STDCOPPER
  114.     DC.L    STDCOPPER
  115.     DC.W    0
  116.     DC.W    0
  117.     DC.W    0
  118.  
  119. _INITVIEWPORT
  120.     DC.L    $EEEEEEEE
  121.     DC.L    $EEEEEEEE
  122.     DC.L    $EEEEEEEE
  123.     DC.L    $EEEEEEEE
  124.     DC.L    $EEEEEEEE
  125.     DC.L    0
  126.     DC.W    0
  127.     DC.W    0
  128.     DC.W    0
  129.     DC.W    0
  130.     DC.W    0
  131.     DC.B    0,0
  132.     DC.L    _INITRASINFO
  133.  
  134. _INITRASINFO
  135.     DC.L    0
  136.     DC.L    $EEEEEEEE
  137.     DC.W    0
  138.     DC.W    0
  139.  
  140. _FONTTABLE
  141.     DC.L    _TOPAZNAME,_TOPAZ8FONT
  142.     DC.L    0
  143.  
  144. _TOPAZNAME
  145.     DC.B    'topaz.font',0
  146.     EVEN
  147.  
  148. _TOPAZ8FONT
  149.     DC.L    0,0,0,0,0        ;EMPTY MESSAGEPORT
  150.     DC.W    8            ;YSIZE
  151.     DC.B    0            ;NO SPECIAL STYLE
  152.     DC.B    $41            ;FONTFLAGS:DESIGNED,ROMFONT
  153.     DC.W    8            ;XSIZE
  154.     DC.W    6            ;BASELINE
  155.     DC.W    1            ;FETT: 1 PIXEL VERSETZT
  156.     DC.W    1            ;1 TASK BENUTZT FONT (DUMMY)
  157.     DC.B    $20            ;LOWEST CHAR IS SPACE
  158.     DC.B    $FF            ;HIGHEST CHAR IS "y
  159.     DC.L    _TOPAZ8DATA        ;FONTIMAGES
  160.     DC.W    $C0            ;MODULO
  161.     DC.L    _TOPAZ8OFFSETS        ;OFFSETTABLES
  162.     DC.L    0            ;NON PROPORTIONAL FONT
  163.     DC.L    0            ;NO KERNING
  164.  
  165. _TOPAZ8DATA
  166.     INCBIN    REPLFONT_DATA
  167.  
  168. _TOPAZ8OFFSETS
  169.     INCBIN    REPLFONT_BITS
  170.  
  171. **************************************************************************
  172. *    GRAPHICS LIBRARY FUNCTIONS
  173. **************************************************************************
  174.  
  175. _UCOPPERLISTINIT:
  176.     cmp.l    #0,a0
  177.     bne.b    .nz
  178.     moveq.l    #0,D0
  179.     bra.b    .exit    ; error, returns NULL
  180. .nz
  181.     ; ok, we can continue
  182.  
  183.     mulu    #3,D0    ; n*4*3 bytes to initialize
  184.     subq.l    #1,D0
  185. .loop    
  186.     
  187.     move.l    a0,D0
  188. .exit:
  189.     rts
  190.  
  191. _FreeVPortCopLists:
  192.     move.l    A2,-(A7)
  193.     move.l    A0,A2
  194.     move.l    #200,D1
  195.     move.l    (vp_DspIns,a2),A1
  196.     move.l    (4),A6
  197.     jsr    (_LVOFreeMem,A6)
  198.  
  199.     clr.l    (vp_DspIns,a2)
  200.  
  201.     ; nothing allocated for the 3 of them below
  202.  
  203.     clr.l    (vp_SprIns,a2)
  204.     clr.l    (vp_ClrIns,a2)
  205.     clr.l    (vp_UCopIns,a2)
  206.  
  207.     move.l    (a7)+,A2
  208.     rts
  209.  
  210. _InitTmpRas:
  211.     move.l    A1,(A0)
  212.     move.l    D0,4(A0)
  213.     move.l    A0,D0
  214.     rts
  215.  
  216. _InitArea:
  217.     MOVE.L    A1,4(A0)
  218.     MOVE.L    A1,(A0)
  219.     MOVE    D0,18(A0)
  220.     ASL.L    #2,D0
  221.     ADDA    D0,A1
  222.     MOVE.L    A1,12(A0)
  223.     MOVE.L    A1,8(A0)
  224.     CLR    16(A0)
  225.     RTS
  226.     
  227. _InitView
  228.     movem.l    D0/A0,-(A7)
  229.     move.w    #$8,D0
  230. .zero
  231.     clr.w    (A0)+
  232.     dbf    D0,.zero
  233.     movem.l    (A7)+,D0/A0
  234.     rts
  235.  
  236. _InitVPort    
  237.     movem.l    D0/A0,-(A7)
  238.     move.w    #9,D0
  239. .zero
  240.     clr.l    (A0)+
  241.     dbf    D0,.zero
  242.     movem.l    (A7)+,D0/A0    
  243.     rts
  244.  
  245. _InitRastPort
  246.     MOVE.L    #$EEEEEEEE,(A1)
  247.     MOVE.L    #0,rp_BitMap(A1)
  248.     MOVE.L    #$EEEEEEEE,rp_AreaPtrn(A1)
  249.     MOVE.L    #$EEEEEEEE,rp_TmpRas(A1)
  250.     MOVE.L    #$EEEEEEEE,rp_AreaInfo(A1)
  251.     MOVE.L    #0,rp_GelsInfo(A1)
  252.     MOVE.L    #$FF0000FF,rp_Mask(A1)    
  253.     MOVE.L    #$01000000,rp_DrawMode(A1)
  254.     CLR.L    rp_Flags(A1)
  255.     CLR.L    rp_cp_x(A1)
  256.     CLR.L    rp_minterms(A1)
  257.     CLR.L    rp_minterms+4(A1)
  258.     CLR.L    rp_PenWidth(A1)
  259.     MOVE.L    #_TOPAZ8FONT,rp_Font(A1)
  260.     CLR.W    rp_AlgoStyle(A1)
  261.     MOVE.L    #$00080008,rp_TxHeight(A1)
  262.     MOVE.L    #$00060008,rp_TxBaseline(A1)
  263.     CLR.L    rp_RP_User(A1)
  264.     RTS
  265.  
  266. _SETAPEN
  267.     MOVE.B    D0,rp_FgPen(A1)
  268.     RTS
  269.  
  270. _SETBPEN
  271.     MOVE.B    D0,rp_BgPen(A1)
  272.     RTS
  273.  
  274. _SETDRAWMODE
  275.     MOVE.B    D0,rp_DrawMode(A1)
  276.     RTS
  277.  
  278. _SETMOVE
  279.     MOVE.W    D0,rp_cp_x(A1)
  280.     MOVE.W    D1,rp_cp_y(A1)
  281.     RTS
  282.  
  283. _BLTCLEAR    AND.W    #2,D1
  284.     BNE.S    .FAIL
  285.     LSR.W    #1,D0
  286.     SUBQ.W    #1,D0
  287. .1    CLR.W    (A1)+
  288.     DBF    D0,.1
  289.     RTS
  290.  
  291. .FAIL        pea    _LVOBltClear
  292.         pea    _gfxname
  293.         bra    _emufail
  294.  
  295. _ALLOCRASTER
  296.     ADD.W    #$F,D0
  297.     LSR.W    #3,D0
  298.     AND.W    #$FFFE,D0
  299.     MULU    D1,D0
  300.     MOVEQ.L    #MEMF_CHIP!MEMF_PUBLIC,D1
  301.     BSR.W    ALLOCM
  302.     RTS
  303.  
  304. _FREERASTER
  305.     ADD.W    #$F,D0
  306.     LSR.W    #3,D0
  307.     AND.W    #$FFFE,D0
  308.     MULU    D1,D0
  309.     MOVE.L    A0,A1
  310.     BSR.W    FREEM
  311.     RTS
  312.  
  313. _GETCOLORMAP
  314.     MOVE.L    D0,-(A7)
  315.     ADD.L    D0,D0
  316.     ADDQ.L    #8,D0
  317.     MOVE.L    #MEMF_CLEAR,D1
  318.     BSR.W    ALLOCM
  319.     TST.L    D0
  320.     BEQ.S    .FAIL
  321.     MOVE.L    D0,A0
  322.     MOVE.L    (A7)+,D1
  323.     MOVE.W    D1,cm_Count(A0)
  324.     LEA.L    8(A0),A1
  325.     MOVE.L    A1,cm_ColorTable(A0)
  326.     CMP.W    #$20,D1
  327.     BLS.S    .1
  328.     MOVEQ.L    #$20,D1
  329. .1    LEA.L    .COLORTAB(PC),A0
  330. .2    MOVE.W    (A0)+,(A1)+
  331.     SUBQ.W    #1,D1
  332.     BNE.S    .2
  333.  
  334. .FAIL    RTS
  335.  
  336. .COLORTAB
  337.     DC.B    $00,$00,$0F,$00,$00,$F0,$0F,$F0
  338.     DC.B    $00,$0F,$0F,$0F,$00,$FF,$0F,$FF
  339.     DC.B    $06,$20,$0E,$50,$09,$F1,$0E,$B0
  340.     DC.B    $05,$5F,$09,$2F,$00,$F8,$0C,$CC
  341.     DC.B    $00,$00,$01,$11,$02,$22,$03,$33
  342.     DC.B    $04,$44,$05,$55,$06,$66,$07,$77
  343.     DC.B    $08,$88,$09,$99,$0A,$AA,$0B,$BB
  344.     DC.B    $0C,$CC,$0D,$DD,$0E,$EE,$0F,$FF
  345.  
  346. _FREECOLORMAP    ;A0-*COLORMAP
  347.     MOVE.L    (A2),-(A7)
  348.     MOVE.L    A0,A2
  349.     MOVE.L    cm_ColorTable(A2),A1
  350.     MOVEQ.L    #0,D0
  351.     MOVE.W    cm_Count(A2),D0
  352.     ADD.L    D0,D0
  353.     ADDQ.L    #7,D0
  354.     AND.L    #$FFFFFFF8,D0
  355.     BSR.W    FREEM
  356.  
  357.     MOVE.L    A2,A1
  358.     MOVEQ.L    #8,D0
  359.     BSR.W    FREEM
  360.     MOVE.L    (A7)+,A2
  361.     RTS
  362.  
  363. _OPENFONT    
  364.         move.l    a2,-(a7)
  365. ;        CMP.W    #8,4(A0)
  366. ;        BNE.S    .ERR
  367.         MOVE.L    (A0),A1
  368.  
  369.         lea    _FONTTABLE(PC),a2
  370. .next        move.l    (a2)+,a0
  371.         move.l    a0,d0
  372.         beq    .ERR
  373.         bsr    _strcmp
  374.         beq    .found
  375.         addq.l    #4,a2
  376.         bra    .next
  377.  
  378. .found        MOVE.L    (A2),D0
  379.         move.l    (a7)+,a2
  380.         rts
  381.  
  382. .ERR        pea    _LVOOpenFont
  383.         pea    _gfxname
  384.         bra    _emufail
  385.  
  386. _SETFONT    MOVE.L    A0,rp_Font(A1)
  387.         CLR.W    rp_AlgoStyle(A1)
  388.         MOVE.W    tf_YSize(A0),rp_TxHeight(A1)
  389.         MOVE.W    tf_XSize(A0),rp_TxWidth(A1)
  390.         MOVE.W    tf_Baseline(A0),rp_TxBaseline(A1)
  391.         MOVE.W    tf_XSize(A0),rp_TxSpacing(A1)
  392.         RTS
  393.  
  394.  
  395. _PRINTTEXT    ;A0-*STRING, A1-*RASTPORT, D0-CHARCOUNT
  396.         MO